﻿#include "pch.h"
#if _QG_ENABLE_WIDGET
#include "qgp/qgach.h"
#include "qgp/qgaud.h"
#include "qgp/qguwgs.h"

//////////////////////////////////////////////////////////////////////////
// 버튼
KIMPL_SUBCLASS(qwRibbonButton, "WidgetRibbonButton");

qwRibbonButton::qwRibbonButton(qgWidgetType type)
	: super_type(type)
	, _dir(QGWDIR_HORIZ)
	, _icon_coord(tpl::Quad::FillCoord())
{
	_insts.ribbon = true;

	_text_info.size = 14;
}

bool qwRibbonButton::OnUpdate(float adv)
{
	BuildBound();

	if (NeedRefresh())
	{
		if (HasText())
		{
			_font->SetSize(_text_info.size);
			tpl::Point sz = _font->CalcPoint(0, _text_str.Data());

			if (_dir == QGWDIR_HORIZ)
			{
				// 가로 모드 62x22, 아이콘 16x16
				kint m = K_MAX(sz.y, 16);

				// 글자에 따라 재계산
				_bound.right = _bound.left + 16 + sz.x + 3 + 8;
				_bound.bottom = _bound.top + m + 6;
				BuildBound();

				_icon_bound.Set(_client.left + 1, _client.top + 3, _client.left + 16 + 1, _client.top + 16 + 3);

				// 글자 정렬, 얼라인 사용하지 않음
				_font->SetSize(_text_info.size);
				tpl::Point sz = _font->CalcPoint(0, _text_str.Data());
				kint w = _client.Width() - 18;
				kint h = _client.Height();
				_text_info.anch.Set(18 + (w - sz.x) / 2, (h - sz.y) / 2);
			}
			else if (_dir == QGWDIR_VERT)
			{
				// 세로 모드 44x66, 아이콘 32x32
				kint m = K_MAX(sz.x + 4, 44);

				// 재계산
				_bound.right = _bound.left + m;
				_bound.bottom = _bound.top + 66;
				BuildBound();

				kint w = _client.Width();
				m = (w - 32) / 2;

				_icon_bound.Set(_client.left + m, _client.top + 3, _client.left + m + 32, _client.top + 32 + 3);

				// 32는 아이콘, 2는 간격
				_text_info.anch.Set((w - sz.x) / 2, 32 + 4 + 3);
			}
			else
			{
				// 모드를 모름 안그림.
				SetVisible(false);
			}
		}
		else
		{
			// 아이콘만 그리기
			if (_dir == QGWDIR_HORIZ)
			{
				// 가로 모드
				_bound.right = _bound.left + 66;
				_bound.bottom = _bound.top + 22;
			}
			else if (_dir == QGWDIR_VERT)
			{
				// 세로 모드
				_bound.right = _bound.left + 44;
				_bound.bottom = _bound.top + 66;
			}
			else
			{
				// 모드를 모름 안그림
				SetVisible(false);
			}
		}

		SetRefresh(false);
	}

	_blend.Update(adv, _shed->GetBlendSpeed());

	return true;
}

void qwRibbonButton::OnDraw()
{
	if (CanFill())
	{
		// 배경
		if (GetStatus() == QGWS_NORMAL)
			_shed->DrawFillRect(_client, GetResource());

		// 아이콘
		if (_tex)
			_shed->DrawFillRect(_icon_bound, tpl::ColorValues::White, _tex);
	}

	if (HasBorder())
		_shed->DrawEmptyRect(_client, _color_border);

	if (HasText())
	{
		qbWidgetTextInfo info(_text_info);

		_shed->DrawAnchText(_font, _text_str.Data(), _client, info, 0);
	}

	qwCtrl::OnDraw();
}

//
void qwRibbonButton::SetDirection(qgWidgetDirection dir)
{
	if (dir == QGWDIR_HORIZ || dir == QGWDIR_VERT)
		_dir = dir;
}

#endif	// _QG_ENABLE_WIDGET
